package cn.itcast.mq.config;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.retry.MessageRecoverer;
import org.springframework.amqp.rabbit.retry.RepublishMessageRecoverer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CommonConfig {
//    @Bean
//    public DirectExchange errorExchange() {
//        return new DirectExchange("error.direct", true, false);
//    }
//
//    @Bean
//    public Queue errorQueue() {
//        return QueueBuilder.durable("error.queue").build();
//    }
//
//    @Bean
//    public Binding errorBinding() {
//        return BindingBuilder.bind(errorQueue()).to(errorExchange()).with("error");
//    }
//
//    /**
//     * 消费者本地重试失败后的策略
//     */
//    @Bean
//    public MessageRecoverer messageRecoverer(RabbitTemplate rabbitTemplate) {
//        return new RepublishMessageRecoverer(rabbitTemplate, "error.direct", "error");
//    }
//
//    /**
//     * 测试：死信交换机
//     */
//    @Bean
//    public DirectExchange ttlDirect() {
//        return new DirectExchange("ttl.direct");
//    }
//
//    @Bean
//    public Queue ttlQueue() {
//        return QueueBuilder.durable("ttl.queue")
//                .ttl(5000) // 为队列设置ttl存活时间(超时的消息会成为死信)
//                .deadLetterExchange("dl.direct") // 为队列设置死信交换机
//                .deadLetterRoutingKey("dl") // 设置死信交换机的路由key
//                .build();  // 创建持久化队列
//    }
//
//    @Bean
//    public Binding ttlBinding() {
//        return BindingBuilder.bind(ttlQueue()).to(ttlDirect()).with("ttl");
//    }
//
//    /**
//     * 测试: 惰性队列
//     */
//    @Bean
//    public Queue lazyQueue() {
//        return QueueBuilder.durable("lazy.queue")
//                .lazy() // 设置为惰性队列
//                .build();  // 创建持久化队列
//    }
//
//    @Bean
//    public Queue normalQueue() {
//        return QueueBuilder.durable("normal.queue")
//                .build();  // 创建持久化队列
//    }

    /**
     * 仲裁队列
     * @return
     */
    @Bean
    public Queue quorumQueue() {
        return QueueBuilder.durable("quorum.queue2")
                .quorum()
                .build();  // 创建持久化队列
    }
}
